﻿#define _CRT_SECURE_NO_WARNINGS 1
#include "seqlist.h"
//初始化成绩表
void contactinit(contact* con)
{
	slinit(con);
}
//添加学生数据
void contactadd(contact* con)
{
	peoinfo into;
	printf("输入姓名\n");
	scanf("%s", into.name);
	printf("输入性别\n");
	scanf("%s", into.gender);
	printf("输入学号\n");
	scanf("%d", &into.stuid);
	printf("输入年级\n");
	scanf("%s", into.grade);
	printf("输入班级\n");
	scanf("%s", into.calss);
	printf("输入出生日期\n");
	scanf("%s", into.liday);
	printf("输入数学成绩\n");
	scanf("%d", &into.shugaku);
	printf("输入英语成绩\n");
	scanf("%d", &into.eigo);
	printf("输入语文成绩\n");
	scanf("%d", &into.yw);
	into.seiseki = into.eigo + into.yw + into.shugaku;
	into.heiseki = into.seiseki / 3;
	printf("输入完成\n");
	slpushback(con,into);
}
//根据姓名删除学生数据
int findweizhi(contact* con, char name[])
{
	for (int i = 0; i < con->size;i++)
	{
		if (0==strcmp(con->arr[i].name, name))
		{
			return i;
		}
	}
	return -1;
}
void contactdel(contact* con)
{
	char name[NAME__MAX];
	printf("输入要删除学生的姓名\n");
	scanf("%s", name);
	int find = findweizhi(con, name);
	if (find == -1)
	{
		printf("未找到学生，请重新选择\n");
		return;
	}
	slerase(con,find);
	printf("删除成功\n");
}
//根据学号删除学生数据
int findweizhiid(contact* con,int* id)
{
	for (int i = 0; i < con->size; i++)
	{
		if (con->arr[i].stuid==*id)
		{
			return i;
		}
	}
	return -1;
}
void contactdelid(contact* con)
{
	int stuid1=0;
	printf("输入要删除学生的学号\n");
	scanf("%d", &stuid1);
	int find = findweizhiid(con, &stuid1);
	if (find == -1)
	{
		printf("未找到学生学号，请重新选择\n");
		return;
	}
	slerase(con, find);
	printf("删除成功\n");
}
//展⽰学生数据
void contactshow(contact* con)
{
	printf("姓名   性别 学号       年级   班级    出生日期   数学   英语   语文    总分   平均分\n");
	for (int i = 0; i < con->size; i++)
	{
		printf("%-6s %-4s %-10d %-6s %-6s %-10s %-6d %-6d %-6d %-6d %-6d\n",
			con->arr[i].name,
			con->arr[i].gender,
			con->arr[i].stuid,
			con->arr[i].grade,
			con->arr[i].calss,
			con->arr[i].liday,
			con->arr[i].shugaku,
			con->arr[i].eigo,
			con->arr[i].yw,
			con->arr[i].seiseki,
			con->arr[i].heiseki
		);
	}
}
//通过姓名查找学生数据
void contactfind(contact* con)
{
	char Name[NAME__MAX]; 
	printf("输入要查找学生的姓名\n");
	scanf("%s", Name);
	int find = findweizhi(con, Name);
	if (find == -1)
	{
		printf("要查找的学生不存在\n");
		return;
	}
	printf("姓名   性别 学号       年级   班级    出生日期   数学   英语   语文    总分   平均分\n");
	printf("%-6s %-4s %-10d %-6s %-6s %-10s %-6d %-6d %-6d %-6d %-6d\n",
		    con->arr[find].name,
			con->arr[find].gender,
			con->arr[find].stuid,
			con->arr[find].grade,
			con->arr[find].calss,
			con->arr[find].liday,
			con->arr[find].shugaku,
			con->arr[find].eigo,
			con->arr[find].yw,
			con->arr[find].seiseki,
			con->arr[find].heiseki
	      );
}
//通过学号查找学生数据
void contactfindid(contact* con)
{
	int id1;
	printf("输入要查找学生的学号\n");
	scanf("%d",&id1);
	int find = findweizhiid(con, &id1);
	if (find == -1)
	{
		printf("要查找的学生不存在\n");
		return;
	}
	printf("姓名   性别 学号       年级   班级    出生日期   数学   英语   语文    总分   平均分\n");
	printf("%-6s %-4s %-10d %-6s %-6s %-10s %-6d %-6d %-6d %-6d %-6d\n",
		con->arr[find].name,
		con->arr[find].gender,
		con->arr[find].stuid,
		con->arr[find].grade,
		con->arr[find].calss,
		con->arr[find].liday,
		con->arr[find].shugaku,
		con->arr[find].eigo,
		con->arr[find].yw,
		con->arr[find].seiseki,
		con->arr[find].heiseki
	);
}
//通过姓名修改学生数据
void contactmodify(contact* con)
{
	char name[NAME__MAX];
	printf("输入要修改学生的姓名\n");
	scanf("%s", name);
	int find = findweizhi(con, name);
	if (find == -1)
	{
		printf("要查找的学生不存在\n");
		return;
	}
	printf("输入新的姓名\n");
	scanf("%s",con->arr[find].name);
	printf("输入新的性别\n");
	scanf("%s", con->arr[find].gender);
	printf("输入新的学号\n");
	scanf("%d", &con->arr[find].stuid);
	printf("输入新的年级\n");
	scanf("%s", con->arr[find].grade);
	printf("输入新的班级\n");
	scanf("%s", con->arr[find].calss);
	printf("输入新的出生年月\n");
	scanf("%s", con->arr[find].liday);
	printf("输入新的数学成绩\n");
	scanf("%d", &con->arr[find].shugaku);
	printf("输入新的英语成绩\n");
	scanf("%d", &con->arr[find].eigo);
	printf("输入新的语文成绩\n");
	scanf("%d", &con->arr[find].yw);
	con->arr[find].seiseki = con->arr[find].eigo + con->arr[find].shugaku + con->arr[find].yw;
	con->arr[find].heiseki = con->arr[find].seiseki / 3;
	printf("修改完成\n");
}
//通过学号修改学生数据
void contactmodifyid(contact* con)
{
	long int id;
	printf("输入要修改学生的学号\n");
	scanf("%d", &id);
	int find = findweizhiid(con, &id);
	if (find == -1)
	{
		printf("要查找的学生学号不存在\n");
		return;
	}
	printf("输入新的姓名\n");
	scanf("%s", con->arr[find].name);
	printf("输入新的性别\n");
	scanf("%s", con->arr[find].gender);
	printf("输入新的学号\n");
	scanf("%d", &con->arr[find].stuid);
	printf("输入新的年级\n");
	scanf("%s", con->arr[find].grade);
	printf("输入新的班级\n");
	scanf("%s", con->arr[find].calss);
	printf("输入新的出生年月\n");
	scanf("%s", con->arr[find].liday);
	printf("输入新的数学成绩\n");
	scanf("%d", &con->arr[find].shugaku);
	printf("输入新的英语成绩\n");
	scanf("%d", &con->arr[find].eigo);
	printf("输入新的语文成绩\n");
	scanf("%d", &con->arr[find].yw);
	con->arr[find].seiseki = con->arr[find].eigo + con->arr[find].shugaku + con->arr[find].yw;
	con->arr[find].heiseki = con->arr[find].seiseki / 3;
	printf("修改完成\n");
}
//销毁学生数据
void contactdestroy(contact* con)
{
	sldestroy(con);
}
int findweizhisei(contact* con, int* sei)
{
	for (int i = 0; i < con->size; i++)
	{
		if (con->arr[i].seiseki == *sei)
		{
			return i;
		}
	}
	return -1;
}
//按总分排序
void allseikei(contact* con)
{
	int* a = (int*)malloc(con->size * 4);
	for (int i = 0; i < con->size; i++)
	{
		a[i] = con->arr[i].seiseki;
	}
	shell(a,con->size);
	for (int i = 0; i < con->size; i++)
	{
		int sei = a[i];
		int find = findweizhisei(con, &sei);
		if (find == -1)
		{
			printf("排序失败\n");
			return;
		}
		printf("姓名   性别 学号       年级   班级    出生日期   数学   英语   语文    总分   平均分\n");
		printf("%-6s %-4s %-10d %-6s %-6s %-10s %-6d %-6d %-6d %-6d %-6d\n",
			con->arr[find].name,
			con->arr[find].gender,
			con->arr[find].stuid,
			con->arr[find].grade,
			con->arr[find].calss,
			con->arr[find].liday,
			con->arr[find].shugaku,
			con->arr[find].eigo,
			con->arr[find].yw,
			con->arr[find].seiseki,
			con->arr[find].heiseki
		);
	}
	printf("排序完成\n");
}
//按成绩统计人数
void seikeicounts(contact* con)
{
	int* a = (int*)malloc(con->size * 4);
	for (int i = 0; i < con->size; i++)
	{
		a[i] = con->arr[i].shugaku;
	}
	int bujige = 0;
	int jige = 0;
	int lianghao = 0;
	int youxiu = 0;
	for (int i = 0; i < con->size; i++)
	{
		if (a[i] < 60)
		{
			bujige++;
		}
		else if (a[i] >= 60 && a[i] < 70)
		{
			jige++;
		}
		else if (a[i] >= 70 && a[i] < 90)
		{
			lianghao++;
		}
		else
		{
			youxiu++;
		}
	}
	printf("优秀：%d\n良好：%d\n及格：%d\n不及格：%d\n", youxiu, lianghao, jige, bujige);
}
void seikeicounty(contact* con)
{
	int* a = (int*)malloc(con->size * 4);
	for (int i = 0; i < con->size; i++)
	{
		a[i] = con->arr[i].eigo;
	}
	int bujige = 0;
	int jige = 0;
	int lianghao = 0;
	int youxiu = 0;
	for (int i = 0; i < con->size; i++)
	{
		if (a[i] < 60)
		{
			bujige++;
		}
		else if (a[i] >= 60 && a[i] < 70)
		{
			jige++;
		}
		else if (a[i] >= 70 && a[i] < 90)
		{
			lianghao++;
		}
		else
		{
			youxiu++;
		}
	}
	printf("优秀：%d\n良好：%d\n及格：%d\n不及格：%d\n", youxiu, lianghao, jige, bujige);
}
void seikeicountw(contact* con)
{
	int* a = (int*)malloc(con->size * 4);
	for (int i = 0; i < con->size; i++)
	{
		a[i] = con->arr[i].yw;
	}
	int bujige = 0;
	int jige = 0;
	int lianghao = 0;
	int youxiu = 0;
	for (int i = 0; i < con->size; i++)
	{
		if (a[i] < 60)
		{
			bujige++;
		}
		else if (a[i] >= 60 && a[i] < 70)
		{
			jige++;
		}
		else if (a[i] >= 70 && a[i] < 90)
		{
			lianghao++;
		}
		else
		{
			youxiu++;
		}
	}
	printf("优秀：%d\n良好：%d\n及格：%d\n不及格：%d\n", youxiu, lianghao, jige, bujige);
}